Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

165
Vistas
Haga coincidir [etiqueta] y {{etiqueta}} usando un grupo alternativo y búsqueda anticipada

Soy consciente de que esto puede coincidir fácilmente con /(\[tag\]|{{tag}})/ pero eso no es lo que estoy buscando. Este es el comienzo de una expresión regular más larga que estoy tratando de escribir (análisis de atributos, etc.)

Mi criterio es:

  1. Tiene que ser una expresión regular de Javascript (sin PCRE).
  2. La parte entre los envoltorios solo se puede definir una vez.

Tengo la siguiente expresión regular funcionando, pero no me siento cómodo con la expresión regular que no funciona exactamente como la lees:

A los efectos de la legibilidad, voy a pretender que Javascript tiene el indicador "X" aquí. Sé que no.

 (?:(\[)|{{) // Group with alternatives but only capturing group 1 so we can look around (tag) // Capture the part between the wrappers (?: // I don't care about capturing the closing wrapper, just match it (?=\1)}} // Closing condition A (works, but why?) | // OR (?!\1)] // Closing condition B (works, but why?) )

Como puedes ver, funciona aquí:

 let input = ` [tag][ <-- [tag[ [tag}} {{tag] {{tag}} <-- tag}} {{tag [tag tag] `; input = input.replace(/(?:(\[)|{{)(tag)((?=\1)}}|(?!\1)])/g, "@@@@@"); console.log(input);

Si trato de analizar a ojo la expresión regular, ¿no debería ser que la condición de cierre A debe coincidir con ] cuando \k<s> es verdadero?

Sin embargo, si hago eso, termino haciendo coincidir las cosas incorrectas y solo funciona la configuración anterior.

¿Algún gurú de expresiones regulares quiere iluminarme?

Gracias voldomazta

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La primera coincidencia usará la condición de cierre B porque el siguiente carácter es ] , que no es \1 .

La segunda coincidencia utilizará la condición de cierre A porque el grupo 1 no está undefined , lo que satisfará la previsión.

Dado que javascript regex no admite condicionales (como lo hace C #), elegiría el patrón que tiene en la primera línea. Sin embargo, para tener solo la parte de la tag una vez, escribiría la parte de la expresión regular de la tag en una variable, luego usaría el constructor que toma una cadena, ahora es fácil agregar la misma cadena dos veces y solo tiene una expresión regular para mantener.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda